<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 17-4-14
 * Time: 11:02
 */

namespace frontend\components;


use yii\base\Component;
use yii\web\Cookie;

class CartCookieHandler extends Component
{
    private $_cart;

    /*
     * 获取cookie购物车中的数据
     */
    public function __construct(array $config = [])
    {
        //读取请求中的cookies中的购物车中的信息
        $cart = \Yii::$app->request->cookies->get('cart');
        if(empty($cart)){
            $this->_cart = [];
        }else{
            //如果cookies中存在购物车,则反序列化购物车的数据的到之前的购物车中的数据
            $this->_cart = unserialize($cart);
        }

        parent::__construct($config);
    }

    /** 更新购物车中的数据
     * @param $goods_id
     * @param int $num
     * @return object $this
     */
    public function AddCart($goods_id,$num =1){
        if(array_key_exists($goods_id,$this->_cart)){
            $this->_cart[$goods_id]+=$num;
        }else{
            //如果该商品的对应的货号不存在则添加商品购买信息到数组中
            $this->_cart[$goods_id]=$num;
        }
        return $this;
    }

    /** 删除购物车中的数据
     * @param $goods_id
     * @return object $this
     */
    public function DelCartGoods($goods_id){
        unset($this->_cart[$goods_id]);
        return $this;
    }

    /** 更新
     * @param $goods_id
     * @param $num
     * @return $this
     */
    public function updateCart($goods_id,$num){
        $this->_cart[$goods_id]=$num;
        return $this;
    }

    /** 保存 */
    public function save()
    {
        //序列化之前的数组生成一个字符串
        $data = serialize($this->_cart);
        //当用户没有登录时 (保存购物车中的信息到cookie中)
        $cookies =\Yii::$app->response->cookies;
        //把序列化的字符串(购物车中的商品的信息)添加到响应cookie中
        $cookie = new Cookie([
            'name'=>'cart',
            'value'=>$data,
        ]);
        //把cookies添加到响应头中
        $cookies->add($cookie);
    }
    //获取购物车中的数据
    public function getCart(){
        return $this->_cart;
    }
}